export const bluetooth = {
    checkBluetoothAndListDevices, // 新增方法，用于检查蓝牙状态并列出设备
    enableBluetoothIfNeeded,
    listPairedDevices,
    connectToDevice,
    sendData,
    listenForData,
    disconnect,
    isConnected,
}

/**
 * 检查蓝牙是否启用，如果没有则尝试启用
 */
function enableBluetoothIfNeeded() {
    return new Promise((resolve, reject) => {
        console.log('【蓝牙】正在检查蓝牙是否已启用...');

        if (!window.cordova || !window.bluetoothSerial) {
            console.error('【蓝牙】错误：蓝牙插件未加载');
            return reject('蓝牙插件未加载');
        }

        window.bluetoothSerial.isEnabled(
            () => {
                console.log('【蓝牙】蓝牙已启用 ✅');
                resolve(true);
            },
            () => {
                console.log('【蓝牙】蓝牙未启用 ❌，尝试请求用户启用...');
                window.bluetoothSerial.enable(
                    () => {
                        console.log('【蓝牙】用户已启用蓝牙 ✅');
                        resolve(true);
                    },
                    (err) => {
                        console.error('【蓝牙】用户拒绝启用蓝牙 ❌', err);
                        reject('用户拒绝启用蓝牙');
                    }
                );
            }
        );
    });
}

/**
 * 获取已配对设备列表（先确保蓝牙已启用）
 */
async function checkBluetoothAndListDevices() {
    try {
        console.log('【蓝牙】开始检查蓝牙状态并获取设备列表...');
        await enableBluetoothIfNeeded();
        console.log('【蓝牙】准备调用 listPairedDevices...');
        const devices = await listPairedDevices();
        console.log(`【蓝牙】发现 ${devices.length} 个已配对设备 ✅`);
        return devices;
    } catch (err) {
        console.error('【蓝牙】蓝牙初始化失败或无法获取设备列表 ❌', err);
        throw err;
    }
}

// 获取已配对设备列表
function listPairedDevices() {
    return new Promise((resolve, reject) => {
        console.log('【蓝牙】开始扫描已配对设备...');
        window.bluetoothSerial.list(
            (devices) => {
                console.log('【蓝牙】发现设备:', devices);
                resolve(devices);
            },
            (err) => {
                console.error('【蓝牙】蓝牙扫描失败 ❌:', err);
                reject(err);
            }
        );
    });
}

// 连接到指定蓝牙设备
function connectToDevice(address) {
    return new Promise(async (resolve, reject) => {
        const isConn = await isConnected();
        if (isConn) {
            await disconnect(); // 只有在已连接时才断开
        }
        console.log(`【蓝牙】尝试连接到设备地址: ${address}`);
        window.bluetoothSerial.connect(
            address,
            () => {
                console.log(`【蓝牙】成功连接到设备地址: ${address} ✅`);
                resolve();
            },
            (err) => {
                console.error(`【蓝牙】连接到设备地址: ${address} 失败 ❌`, err);
                reject(err);
            }
        );
    });
}

// 发送数据到已连接设备
function sendData(data) {
    return new Promise((resolve, reject) => {
        console.log(`【蓝牙】准备发送数据: ${data}`);
        window.bluetoothSerial.write(
            data,
            () => {
                console.log(`【蓝牙】数据发送成功 ✅: ${data}`);
                resolve();
            },
            (err) => {
                console.error(`【蓝牙】数据发送失败 ❌: ${data}`, err);
                reject(err);
            }
        );
    });
}

// 监听来自蓝牙设备的数据
function listenForData(callback) {
    console.log('【蓝牙】开始监听来自设备的数据...');
    window.bluetoothSerial.subscribe('\n', (data) => {
        console.log(`【蓝牙】收到数据: ${data}`);
        callback(data);
    }, () => {
        console.log('【蓝牙】订阅成功，开始监听蓝牙数据 ✅');
    });
}

// 断开连接
function disconnect() {
    return new Promise((resolve, reject) => {
        console.log('【蓝牙】尝试断开当前连接...');
        window.bluetoothSerial.disconnect(
            () => {
                console.log('【蓝牙】断开连接成功 ✅');
                resolve();
            },
            (err) => {
                console.error('【蓝牙】断开连接失败 ❌', err);
                reject(err);
            }
        );
    });
}


function isConnected() {
    return new Promise((resolve, reject) => {
        window.bluetoothSerial.isConnected(
            () => resolve(true),
            () => resolve(false)
        );
    });
}
